package com.ai.zhly.service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import com.ai.dmc.index.base.impl.base.BaseServiceImpl;
import com.ai.dmc.index.common.bean.FuncBean;
import com.ai.dmc.index.common.bean.LogBean;
import com.ai.dmc.index.common.bean.SmsBean;
import com.ai.dmc.index.common.exception.BusinessException;
import com.ai.dmc.utils.json.JsonUtil;
import com.ai.frame.bean.InputObject;
import com.ai.frame.bean.OutputObject;
import com.ai.frame.logger.Logger;
import com.ai.frame.logger.LoggerFactory;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
/**
* @Title: JobServiceImpl.java
* @Description: 角色管理---实现类
* @author xueyf3  
* @date 2016年5月23日 下午4:18:41
* Copyright：Copyright (c) 2016
* Company：北京亚信智慧数据科技有限公司
* @version V1.0
 */
public class FuncUtilServiceImpl extends BaseServiceImpl implements IFuncUtilService{
	// 定义对应Mapper文件的命名空间
    private static final String NAMESPACE = "Func.";
    
    public static Logger log = LoggerFactory.getServiceLog(FuncUtilServiceImpl.class);
   
    /**
	 * 
	 * @Description :新增功能-文件夾
	 * @author xueyf3
	 * @date 创建时间：2015年8月19日 上午10:16:27
	 * @version 1.0
	 */
    @Override
	public Boolean addFuncFolder(FuncBean bean) {
    	Boolean flag = false;
		// 插入数据
    	try {
    		int i = this.getBaseDao().insert(NAMESPACE + "funcFolderAdd", bean);
    		flag = i>0?true:false;
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
		return flag;
	}
    
    /**
	 * 
	 * @Description :新增功能--功能点,功能权限url
	 * @author xueyf3
	 * @date 创建时间：2015年8月19日 上午10:17:08
	 * @version 1.0
	 */
    @Override
	public Boolean addFuncObj(FuncBean bean) {
		Boolean flag = false;
		// 插入数据
		String funcId = bean.getFuncId();
		String urlMore = bean.getFuncUrlMore();
		String[] urlList = urlMore.split(";");
			for (int i = 0; i < urlList.length; i++) {
				FuncBean ubean = new FuncBean();
				ubean.setFuncId(funcId);
				ubean.setFuncUrl(urlList[i]);
				flag = this.getBaseDao().insert(NAMESPACE+"funcUrlAdd", ubean)>0?true:false;
			}
			flag = flag&&this.getBaseDao().insert(NAMESPACE+"funcObjectAdd", bean)>0?true:false;
		
		return flag;
	}

    /**
	 * 
	 * @Description : 验证funcId是否已存在
	 * @author xueyf3
	 * @date 创建时间：2015年8月19日 下午3:36:34
	 * @version 1.0
	 */
	@Override
	public Boolean checkOnlyId(String funcId) {
		FuncBean result = null;
		result = this.queryFunc(funcId);
		if (result != null) {
			return false;
		}
		return true;
	}

	
	/**
	 * 
	 * @Description :删除所选功能
	 * @author xueyf3
	 * @date 创建时间：2015年8月20日 下午3:38:56
	 * @version 1.0
	 */
	@Override
	public Boolean deleteFunc(String funcIds) {

		Map<String, String> params = new HashMap<String,String>();
		String funcPara = "";
		String[] funcStr = funcIds.split(";");
		
		for (int i = 0; i < funcStr.length; i++) {
			String str = funcStr[i];
			funcPara=funcPara+"'"+str+"'";
			if (i<funcStr.length-1) {
				funcPara+=",";
			}
		}
		params.put("funcIds",funcPara);
		try {
			this.getBaseDao().delete(NAMESPACE+"funcDelete", params);
			this.getBaseDao().delete(NAMESPACE+"funcFolderDelete", params);
			this.getBaseDao().delete(NAMESPACE+"funcUrlDelete", params);
		} catch (Exception e) {
			return false;
		}
		return true;
	}

	/**
	 * 
	 * @Description : 功能新增
	 * @param param
	 * @return
	 * @return Boolean
	 * 
	 * @author : wucm
	 * @date : 2015年8月4日 下午9:28:26
	 * 
	 */
	@Override
	public Boolean funcAdd(FuncBean param) {

		try {
			this.getBaseDao().insert(NAMESPACE+"funcAdd", param);
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
		return true;
	}

	/**
	 * 
	 * @Description : 功能修改
	 * @param param
	 * @return
	 * @return Boolean
	 * 
	 * @author : wucm
	 * @date : 2015年8月4日 下午9:28:26
	 * 
	 */
	@Override
	public Boolean funcModify(FuncBean bean) {
		try {
			String id = "'"+bean.getFuncId()+"'";
			Map<String, String> params = new HashMap<String,String>();
			params.put("funcIds",id);
			this.getBaseDao().delete(NAMESPACE+"funcDelete", params);
			this.getBaseDao().insert(NAMESPACE+"funcAdd", bean);
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
		return true;
	}
	/**
	 * 文件夹操作
	 * */

	@Override
	public Boolean modifyFolder(FuncBean bean) {
		try {
			String id = "'"+bean.getFuncId()+"'";
			Map<String, String> params = new HashMap<String,String>();
			params.put("funcIds",id);
			this.getBaseDao().delete(NAMESPACE+"funcFolderDelete", params);
			this.getBaseDao().insert(NAMESPACE+"funcFolderAdd", bean);
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
		return true;
	}
	
	
	/**
	 * 
	 * @Description :根据bean修改功能-文件夹信息
	 * @author xueyf3
	 * @date 创建时间：2015年8月20日 上午11:44:33
	 * @version 1.0
	 */
	@Override
	public Boolean modifyFunc(FuncBean bean) {
		try {
			String id = "'"+bean.getFuncId()+"'";
			Map<String, String> params = new HashMap<String,String>();
			params.put("funcIds",id);
			this.getBaseDao().delete(NAMESPACE+"funcDelete", params);
			this.getBaseDao().delete(NAMESPACE+"funcUrlDelete", params);
			String funcId = bean.getFuncId();
			String urlMore = bean.getFuncUrlMore();
			String[] urlList = urlMore==null?new String[0]:urlMore.split(";");
			for (int i = 0; i < urlList.length; i++) {
				FuncBean ubean = new FuncBean();
				ubean.setFuncId(funcId);
				ubean.setFuncUrl(urlList[i]);
				this.getBaseDao().insert(NAMESPACE+"funcUrlAdd", ubean);
			}
			this.getBaseDao().insert(NAMESPACE+"funcObjectAdd", bean);
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
		return true;
	}

	/**
	 * 
	 * @Description : 查询功能
	 * @param funcId
	 * @return
	 * @return FuncBean
	 * 
	 * @author : wucm
	 * @date : 2015年8月11日 上午8:56:59
	 * 
	 */
	@Override
	public FuncBean queryFunc(String funcId) {
		FuncBean fBean = null;
		Map<String, String> map = new HashMap<String, String>();
		map.put("funcId", funcId);
		// 查询数据
		List<FuncBean> fList = null;
		List<FuncBean> ffList = null;
		List<FuncBean> urlList = null;
		fList = this.getBaseDao().queryForList(NAMESPACE + "queryFuncList", null,FuncBean.class);
		ffList = this.getBaseDao().queryForList(NAMESPACE + "queryFuncFolderList", null,FuncBean.class);
		urlList = this.getBaseDao().queryForList(NAMESPACE + "queryUrlList", map,FuncBean.class);

		if (fList != null && fList.size() > 0) {
			for (FuncBean u : fList) {
				if (null != funcId && funcId.equals(u.getFuncId())) {
					fBean = u;
					break;
				}
			}
		}

		if (fBean == null) {
			if (ffList != null && ffList.size() > 0) {
				for (FuncBean u : ffList) {
					if (null != funcId && funcId.equals(u.getFuncId())) {
						fBean = u;
						break;
					}
				}
			}

		}
		if (fBean != null) {
			StringBuffer funcUrlMore = new StringBuffer();
			if (urlList != null && urlList.size() > 0) {
				for (FuncBean url : urlList) {
					funcUrlMore.append(url.getFuncUrl());
					funcUrlMore.append(";");
				}
			}
			fBean.setFuncUrlMore(funcUrlMore.toString());
		}

		return fBean;
	}

	/**
	 * 
	 * @Description : 查询功能列表
	 * 
	 * @param funcId
	 * 
	 * @return List<FuncBean>
	 * 
	 * @author : wucm
	 * @date : 2015年8月3日 下午2:51:43
	 * 
	 */
	@Override
	public JSONArray queryFuncTree(String userId, Boolean isAdmin) {
		JSONArray jArr = new JSONArray();
		List<FuncBean> ffList = null;
		List<FuncBean> fList = null;
		List<FuncBean> ufList = null;
		Map<String,String> map = new HashMap<String,String>();
		map.put("userId", userId);
//		ffList = this.getBaseDao().queryForList(NAMESPACE+"queryFuncFolderList", null,FuncBean.class);
		fList = this.getBaseDao().queryForList(NAMESPACE+"queryAllFuncList", null,FuncBean.class);
		ufList = this.getBaseDao().queryForList(NAMESPACE+"queryFuncListByUserId", map,FuncBean.class);
		// 数据判空
				if (null == ffList) {
					ffList = new ArrayList<FuncBean>();
				}
				if (null == fList) {
					fList = new ArrayList<FuncBean>();
				}
				if (null == ufList) {
					ufList = new ArrayList<FuncBean>();
				}

				// 权限过滤1-根据功能状态过滤
				if (!isAdmin) {
					Iterator<FuncBean> it = fList.iterator();
					while (it.hasNext()) {
						FuncBean f = it.next();
						String status = f.getStatus();

						// 不启动的功能对非admin的管理员屏蔽
						if ("0".equals(status)) {
							it.remove();
						}
					}
				}

				// 权限过滤2-根据用户的功能权限
				if (!isAdmin) {
					// 转成map，避免嵌套循环
					Map<String, String> ufMap = new HashMap<String, String>();
					for (FuncBean f : ufList) {
						if (null != f) {
							ufMap.put(f.getFuncId(), "");
						}
					}

					Iterator<FuncBean> it = fList.iterator();
					while (it.hasNext()) {
						FuncBean f = it.next();
						String fId = f.getFuncId();

						// 不启动的功能对非admin的管理员屏蔽
						if (!ufMap.containsKey(fId)) {
							it.remove();
						}
					}
				}

				// 功能树根节点
				JSONObject root = new JSONObject();
				root.put("id", "ROOT");
				root.put("name", "根节点");
				root.put("isParent", true);
				root.put("nocheck", true);
				jArr.add(root);

				// 数据处理--功能文件夹
				if (ffList != null && ffList.size() > 0) {
					for (FuncBean f : ffList) {
						String fId = f.getFuncId();
						String fName = f.getFuncName();
						String parentId = f.getParentFuncId();
						String status = f.getStatus() == null ? "" : f.getStatus();
						JSONObject j = new JSONObject();

						if (null == parentId || parentId.length() == 0) {
							parentId = "ROOT";
						}

						j.put("id", fId);
						j.put("name", fName);
						j.put("pId", parentId);
						j.put("status", status);
						j.put("isParent", true);
						jArr.add(j);
					}
				}

				// 数据处理--功能
				if (fList != null && fList.size() > 0) {
					for (FuncBean f : fList) {
						String fId = f.getFuncId();
						String fName = f.getFuncName();
						String parentId = f.getParentFuncId();
						String status = f.getStatus() == null ? "" : f.getStatus();
						JSONObject j = new JSONObject();

						if (null == parentId || parentId.length() == 0) {
							parentId = "ROOT";
						}

						j.put("id", fId);
						j.put("name", fName);
						j.put("pId", parentId);
						j.put("status", status);
						j.put("type", "func");
						jArr.add(j);
					}
				}
				return jArr;
	}
	

}
